//-----------------------------------------------------------------------
// <copyright file="ILogger.cs" company="Company" author="Nagarro">
//  All rights reserved. Copyright (c) 2013.
// </copyright>
// <summary>This is the ILogger class.</summary>
//-----------------------------------------------------------------------
namespace Company.Project.Shared
{
    using System;
    using System.Diagnostics.CodeAnalysis;

    /// <summary>
    /// Defines the contract for Logger.
    /// </summary>
    public interface ILogger
    {
        /// <summary>
        /// The debug information.
        /// </summary>
        /// <param name="message">The message.</param>
        void Debug(object message);

        /// <summary>
        /// The error message.
        /// </summary>
        /// <param name="message">The message.</param>
        [SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Error",
            Justification = "Identifiers Should Not Match Keywords")]
        void Error(string message);

        /// <summary>
        /// Errors the specified exception.
        /// </summary>
        /// <param name="exceptionToLog">The exception to log.</param>
        [SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", Justification = "Done intentially.")]
        void Error(Exception exceptionToLog);

        /// <summary>
        /// The error message.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="exception">The exception.</param>
        [SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Error",
            Justification = "Identifiers Should Not Match Keywords")]
        void Error(object message, Exception exception);

        /// <summary>
        /// The information method.
        /// </summary>
        /// <param name="message">The message.</param>
        void Info(object message);

        /// <summary>
        /// The Warning method.
        /// </summary>
        /// <param name="message">The message.</param>
        void Warning(object message);
    }
}